home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / programy / Tlen 6.0.1.12 pl / tleninst60112.exe / sdk / Plugin_src / propertieswindow-vc / demoplugin.cpp < prev    next >
C/C++ Source or Header  |  2006-09-18  |  6KB  |  241 lines

  1. // demoplugin.cpp : Defines the entry point for the DLL application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "../../TlenSources/plugin/plugin_struct.h"
  6. #include "../../TlenSources/plugin/plugin_protocol_defs.h"
  7. #include "../../TlenSources/plugin/plugin_options.h"
  8. #include "../../TlenSources/plugin/plugin_propertieswindow.h"
  9. #include "AggressiveOptimize.h"
  10.  
  11. HINSTANCE hInst;
  12. TLENPLUGINFUNCTIONS *tlen_functions;
  13. HWND prop_page = NULL;
  14. HBITMAP icon1;
  15. COLORREF bgColor;
  16. HBRUSH hBrush;
  17. HANDLE AddPropertiesPageHookHandle;
  18.  
  19. TLENPLUGININFO pluginInfo={
  20.     sizeof(TLENPLUGININFO),
  21.     "Demonstracja property page - VC++",
  22.     PLUGIN_API_VERSION,
  23.     MAKE_DWORD_VERSION(1,2,3,4),
  24.     "Opis pluginu",
  25.     "⌐ Prawa autorskie",
  26.     "Producent",
  27.     "E@mail",
  28.     "http://www",
  29.     0,        
  30.     0,        
  31.     0,        
  32.     0        
  33. };
  34.  
  35. extern "C" __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD TlenVersion);
  36. extern "C" __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *tlen_functions);
  37. extern "C" __declspec(dllexport) int UnloadPlugin(void);
  38.  
  39.                 
  40.  
  41. int prefDialog(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam)
  42. {
  43.     switch (message) {
  44.  
  45.         case WM_INITDIALOG:
  46.         {
  47.                 tlen_functions->CallTlenFunction(hInst, TLEN_ADD_DIALOG_HANDLE, (WPARAM) hWnd, NULL);
  48.                 hBrush=::CreateSolidBrush(bgColor);
  49.                 break;
  50.         }
  51.  
  52.         case WM_ERASEBKGND:
  53.         {
  54.     
  55.                 RECT rc;
  56.                 ::GetClientRect(hWnd, &rc);
  57.                 HDC hdc= (HDC) wparam;
  58.                 
  59.                  FillRect(hdc,&rc,hBrush);
  60.                 
  61.                 return true;
  62.         }
  63.         
  64.         case WM_CTLCOLORSTATIC:
  65.         {
  66.                 RECT rc;
  67.                 HWND hnd = (HWND) lparam;
  68.                 ::GetClientRect(hnd, &rc);
  69.                 HDC hdc= (HDC) wparam;
  70.                 SetTextColor(hdc, RGB(0,0,0));
  71.                 SetBkColor(hdc, bgColor);
  72.                 
  73.                 return (int) hBrush;
  74.         }
  75.  
  76.         case WM_DESTROY:
  77.         {
  78.                 tlen_functions->CallTlenFunction(hInst, TLEN_REMOVE_DIALOG_HANDLE, (WPARAM) hInst, NULL); 
  79.                 DeleteObject(hBrush);
  80.                 break;
  81.         }
  82.  
  83.     }
  84.  
  85.     return 0;
  86. }
  87.  
  88.  
  89. static int TlenPropertyPagesAction(WPARAM wParam,LPARAM lParam)
  90. {
  91.  TlenPropertiesPageShowInfo *info = (TlenPropertiesPageShowInfo *) wParam;
  92.  
  93.  switch (info->Action)
  94.  {
  95.   case TLEN_PROPERTIESPAGESHOW_ACTION_SHOW:
  96.   {
  97.    if (info->Page->OwnerData == NULL)
  98.    {
  99.      bgColor = info->bgColor;
  100.      prop_page = CreateDialog(hInst, MAKEINTRESOURCE(101), info->Handle, (DLGPROC)prefDialog);
  101.      
  102.      info->Page->OwnerData = prop_page;
  103.    }
  104.  
  105.    SetWindowPos(prop_page, 0, info->x, info->y, info->width, info->height, SWP_NOSIZE | SWP_NOZORDER);
  106.    ShowWindow(prop_page, SW_SHOW);
  107.    info->Icon.Bitmap = icon1;
  108.  
  109.    strcpy(info->Caption, "Przyk│adowa PropertyPage");
  110.    strcpy(info->Description, "Bla bla bla, jaki£ opis");
  111.  
  112.    return 0;
  113.   }
  114.  
  115.   case TLEN_PROPERTIESPAGESHOW_ACTION_HIDE:
  116.   {
  117.    HWND wnd = (HWND) info->Page->OwnerData;
  118.  
  119.    if (wnd) ShowWindow(wnd, SW_HIDE);
  120.  
  121.    return 0;
  122.   }
  123.  
  124.   case TLEN_PROPERTIESPAGESHOW_ACTION_DESTROY:
  125.   {
  126.     HWND wnd = (HWND) info->Page->OwnerData;
  127.     if (wnd)
  128.     {
  129.         tlen_functions->CallTlenFunction(hInst, TLEN_REMOVE_DIALOG_HANDLE, (WPARAM) wnd, NULL); 
  130.         DestroyWindow(prop_page);
  131.         info->Page->OwnerData = NULL;
  132.         prop_page = NULL;
  133.     }
  134.  
  135.    return 0;
  136.   }
  137.  
  138.  
  139.   case TLEN_PROPERTIESPAGESHOW_ACTION_OK:
  140.   {
  141.     MessageBox(NULL, "TLEN_PROPERTIESPAGESHOW_ACTION_OK", "", MB_OK);
  142.     return 0;
  143.   }
  144.  
  145.   case TLEN_PROPERTIESPAGESHOW_ACTION_APPLY:
  146.   {
  147.     MessageBox(NULL, "TLEN_PROPERTIESPAGESHOW_ACTION_APPLY", "", MB_OK);
  148.     return 0;
  149.   }
  150.  
  151.   case TLEN_PROPERTIESPAGESHOW_ACTION_CANCEL:         
  152.   {
  153.     MessageBox(NULL, "TLEN_PROPERTIESPAGESHOW_ACTION_CANCEL", "", MB_OK);
  154.     return 0;
  155.   }
  156.  
  157.   case TLEN_PROPERTIESPAGESHOW_ACTION_ADD:            
  158.   {
  159.     MessageBox(NULL, "TLEN_PROPERTIESPAGESHOW_ACTION_ADD", "", MB_OK);
  160.     return 0;
  161.   }
  162.  
  163.   case TLEN_PROPERTIESPAGESHOW_ACTION_SEARCH:
  164.   {
  165.     MessageBox(NULL, "TLEN_PROPERTIESPAGESHOW_ACTION_SEARCH", "", MB_OK);
  166.     return 0;
  167.   }
  168.  
  169.   case TLEN_PROPERTIESPAGESHOW_ACTION_CONTACTCHANGE:
  170.   {
  171.     MessageBox(NULL, "TLEN_PROPERTIESPAGESHOW_ACTION_CONTACTCHANGE", "", MB_OK);
  172.     return 0;
  173.   }
  174.  }
  175.  
  176.  return 0;
  177. }
  178.  
  179. static int TlenOnAddPropertyPagesRequest(WPARAM wParam,LPARAM lParam)
  180. {
  181.  TlenPropertiesWindowInfoDef *info = (TlenPropertiesWindowInfoDef *) wParam;
  182.  //teraz chcemy np. tylko dodawac zakladke do kontaktow tlenowych
  183.  if (strcmp(info->Contact.ProtocolID, PROTOCOL_ID_TLEN) != 0) return 0;
  184.  
  185.  TlenPropertiesPageDefinition page;
  186.  InitializeStruct(page);
  187.  
  188.  page.CallBackFunction = TlenPropertyPagesAction;
  189.  page.Flags = TLEN_PROPERTIESPAGE_FLAG_TLENCOLOR;
  190.  
  191.  if (info->WindowType == TLEN_PROPERTIESWINDOW_WINDOWTYPE_PROPERTIES)
  192.  {
  193.   page.PageID = "MojPlugin/zakladka1";
  194.   page.Name = "Zak│adka 1 (edit)";
  195.   tlen_functions->CallTlenFunction(hInst, TLEN_PROPERTIES_PAGEADD, (WPARAM) &page, lParam);
  196.  }
  197.  else if (info->WindowType == TLEN_PROPERTIESWINDOW_WINDOWTYPE_ADDCONTACT)
  198.  {
  199.   page.PageID = "MojPlugin/zakladka2";
  200.   page.Name = "Zak│adka 2 (add)";
  201.   tlen_functions->CallTlenFunction(hInst, TLEN_PROPERTIES_PAGEADD, (WPARAM) &page, lParam);
  202.  }
  203.  
  204.  return 0;
  205. }
  206.  
  207. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
  208. {
  209.     hInst=hinstDLL;
  210.     return TRUE;
  211. }
  212.  
  213. __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD tlenVersion)
  214. {
  215.     return &pluginInfo;
  216. }
  217.  
  218. __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *functions)
  219. {
  220.     icon1 = (HBITMAP) LoadImage(hInst, MAKEINTRESOURCE(104),IMAGE_BITMAP, 32, 32, NULL);
  221.  
  222.     tlen_functions = functions;
  223.     
  224.     AddPropertiesPageHookHandle = tlen_functions->HookTlenEvent(hInst, TLEN_PROPERTIES_EVENT_ADDPAGES, TlenOnAddPropertyPagesRequest);
  225.  
  226.     return 0;
  227. }
  228.  
  229. __declspec(dllexport) int UnloadPlugin(void)
  230. {
  231.     tlen_functions->UnhookTlenEvent(hInst, AddPropertiesPageHookHandle);
  232.  
  233.     if (prop_page)
  234.     {
  235.      DestroyWindow(prop_page);
  236.     }
  237.  
  238.     DeleteObject(icon1);
  239.     return 0;
  240. }
  241.